package tw.rescue.dao;

import java.util.Date;
import java.util.List;
import tw.rescue.model.slim3.model.Message;

/**
 * 為了不在 dao interface 綁定 GAE/J 的 Key 型別，所以在此 使用泛型 K，
 * Slim3 的實作才將 K 綁定為 Key
 * @author mylee
 *
 * @param <K>
 */
public interface MessageBoardDao<K> {
	/**
	 * 張貼新留言
	 * @param message
	 */
	public void newMessage(Message message);

	/**
	 * 回覆留言
	 * @param replyTargetKey
	 * @param message
	 */
	public void replyMessage(K replyToKey, Message message);

	/**
	 * 設定是否置頂
	 * @param key
	 * @param isTop
	 */
	public void topMessage(K key, boolean isTop);
	
	/**
	 * 設定是否標記保留
	 * @param key
	 * @param isMarked
	 */
	public void markMessage(K key, boolean isMarked);
	
	/**
	 * 
	 * @param category
	 * @param count
	 * @return
	 */
	public List<Message>queryMessages(String category, int from, int count);
	
	/**
	 * 依分類及日期查詢留言主鍵值，最多回傳1000筆
	 * @param from
	 * @param to
	 * @return
	 */
	public List<K>queryMessageKeys(String category, Date from, Date to);
	
	/**
	 * 讀取 keys 所代表的留言內容
	 * @param keys
	 * @return
	 */
	public List<Message>fetchMessages(Iterable<K> keys);
	
	/**
	 * 讀取主鍵值所對應的留言內容
	 * @param key
	 * @return
	 */
	public Message getMessage(K key);

	/**
	 * 刪除留言
	 * @param key
	 */
	public void deleteMessage(K key);
	
	/**
	 * 刪除留言
	 * @param key
	 */
	public void deleteMessages(Iterable<K> key);
}
